package proj.pt.model.dao;

import java.util.List;

import proj.pt.model.Course;
import proj.pt.model.Department;
import proj.pt.model.Exam;
import proj.pt.model.Result;
import proj.pt.model.SubCourse;
import proj.pt.model.Subject;
import proj.pt.model.SubjectAllotment;
import proj.pt.model.User;

public interface Dao {

	public List<Department> getDepartments();
	public Department getDepartment(Long id);
	public void saveOrUpdateDepartment(Department department);
	public void deleteDepartment(Department department);
	
	public List<Course> getCourses();
	public List<Course> getCourses(Department department);
	public Course getCourse(Long id);
	public List<SubCourse> getSubCourses();
	public SubCourse getSubCourse(Long id);
	public SubCourse getSubCourse(String subCourseId);
	public void saveOrUpdateCourse(Course course);
	public void deleteCourse(Course course);
	
	
	public List<Subject> getSubjects();
	public List<Subject> getSubjects(SubCourse subCourse);
	public Subject getSubject(Long id);
	public Subject getSubject(String subjectCode);
	public void saveOrUpdateSubject(Subject subject);
	public void deleteSubject(Subject subject);
	
	
	public List<User> getUsers();
	public List<User> getUsers(List roles);
	public List<User> getUsers(Department department, List roles);
	public List<User> getUsers(SubCourse subCourse, List roles);
	public List<User> getUsers(Course course, List roles);
	public List<User> getUsersInResult(Exam exam);
	public User getUserByStaffId(String staffId);
	public User getUserByStudentId(String studentId);
	public User getUserByRegistrationNo(String registrationNo);
	public User getUser(Long id);
	public void saveOrUpdateUser(User user);
	public void deleteUser(User user);
	
	
	public List<Exam> getExams();
	public List<Exam> getExams(SubCourse subCourse);
	public List<Exam> getExams(User tutor, SubCourse subCourse);
	public List<Exam> getExams(SubCourse subCourse, String examType);
	public List<Exam> getExams(User tutor, SubCourse subCourse, String examType);
	public List<Exam> getExams(Subject subject, String examType);
	public Exam getExam(Long id);
	public Exam getExam(String examId);
	public void saveOrUpdateExams(Exam exam);
	public void deleteExams(Exam exam);
	
	
	
	public List<SubjectAllotment> getSubjectAllotments(SubCourse subCourse);
	public List<SubjectAllotment> getSubjectAllotments(User staff, SubCourse subCourse);
	public List<SubjectAllotment> getSubjectAllotments(User tutor, SubCourse subCourse, String batchYear, Subject subject);
	public List<SubjectAllotment> getSubjectAllotments(User staff);
	public List<SubjectAllotment> getSubjectAllotments(Subject subject);
	public SubjectAllotment getSubjectAllotment(Long id);
	public void saveOrUpdateSubjectAllotment(SubjectAllotment allotment);
	public void deleteSubjectAllotment(SubjectAllotment allotment);
		
	
	public List<Result> getExamResults(Exam exam);
	public List<Result> getExamResults(Subject subject, String examType, User student);
	public List<Result> getExamResults(Subject subject, String examType);
	public void saveExamResult(List results);
	
}
